import { getToken, setToken, removeToken, setTimeKey } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user'

const state = () => ({
  // 共享token状态
  token: getToken(), // 先默认给一个空值
  userInfo: {}, // 用户资料
  companyId: null // 公司id
})

const mutations = {
  // 更新token
  setToken(state, payload) {
    state.token = payload // 更新token数据

    // token存到本地
    setToken(payload)
  },

  // 退出登录, 清除 token
  removeToken(state, paylosd) {
    state.token = null

    // 删除本地缓存
    removeToken()
  },

  // 设置用户资料
  updateUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },

  // 删除用户资料
  reomveUserInfo(state) {
    state.userInfo = {}
  },

  // 设置公司id
  setCompanyId(state) {
    state.companyId = state.userInfo.companyId
  }
}

const actions = {
  // 异步请求
  // 封装一个登录action
  async login({ commit }, data) {
    const res = await login(data)
    // axios默认给返回体加了一层data

    // 成功
    commit('setToken', res) // 注入token
    setTimeKey() // 注入时间
  },

  // 获取用户资料
  async getUserInfo({ commit }) {
    const res = await getUserInfo()
    const resultAvator = await getUserDetailById(res.userId)
    commit('updateUserInfo', { res, ...resultAvator })
    return res // 这里为什么要返回 为后面埋下伏笔
  },

  // 登出
  logout({ commit }) {
    commit('removeToken')
    commit('reomveUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

